import java.util.regex.Matcher;
import java.util.regex.Pattern;

// 正则学习
public class Main {
    public static void main(String[] args) {
        String result = "aa.aa@qq.com";
        // 限定符？ 表示 前面 的一个字符可以出现0次或者1次 比如 ab?c 能匹配上 ac abc 无法匹配abbc
        // 限定符* 表示 前面 的一个字符可以出现0次或者多次 比如 ab*c 能匹配上 ac abc abbc
        // 限定符+ 表示 前面 的一个字符可以出现1次或者多次 必须是1次以上 比如 ab+c 能匹配是 abc abbc 无法匹配ac
        // 限定符{} 表示 前面 的一个字符可以出现的次数 比如ab{2,6}c 匹配返回就是abbc-abbbbbbc 如果是 ab{2，}c 表示2以上 ab{6}c 表示精准匹配6位

        // ()以上前面都是一个的字符 如果是多个字符怎需要用()阔起来 (ab)*c

        // | 或运算 (a|b)+c c前面是 a或者b 出现1次以上可以用
        // []字符类 [abc]+ 表示范围是abc 小括号是表示匹配内容 方括号是表示匹配范围 只有范围在abc以内超过1次都能匹配上
        // []还可以匹配广域范围 比如[a-z] [A-Z] [0-9] 或者组合匹配[a-zA-Z0-9]表示大小写字符与数字
        // ^表示非的意思 [^0-9] 表示非数字类型  还可以匹配行首 ^a 表示以a为首
        // 元字符 \d 代表数字字符 相当于 [0-9] \D代表非数字字符 [^0-9]
        // \w 代表数字字母加下划线 \W 代表非单词字符 [^a-zA-Z]
        // \s 表示tab字符和换行符 \S 代表非空白字符
        // .表示任意字符带不代表换行符号
        // $匹配行尾 与 ^匹配行首对应 $a 表示匹配行尾的a
        // ? 可以把贪婪匹配改为懒惰匹配

        // 所有元字符必须要加\\转义
        boolean matcher = Pattern.matches("([a-zA-z0-9]+\\.*)+@{1}([a-zA-z0-9]+\\.*)+", result);
        System.out.println(matcher);


    }
}
